package com.intct;

import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

/**
 * @author gufg
 * @create 2024-09-23 16:55
 */
public class IntctHBaseConnection {

    /**
     * 1.API单线程连接  main方法中注释部分
     * 2.API多线程连接  静态属性/静态代码块
     */


    // 声明一个静态属性
    public static Connection connection = null;

    static {
        try {
            // 1.创建连接配置 项目中不能出现配置固定参数，所以采用hbase-sitm.xml文件方式
            // Configuration conf = new Configuration();

            // 2.添加配置参数   项目中不能出现配置固定参数，所以采用hbase-sitm.xml文件方式
            // conf.set("hbase.zookeeper.quorum", "node1,node2,node3:2181");

            // 3.创建链接  默认使用同步连接 同时使用本地文件的形式添加参数
            // connection = ConnectionFactory.createConnection(conf);
            connection = ConnectionFactory.createConnection();
        } catch (IOException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        }
    }

    public static void closeConnection() throws IOException {
        // 判断连接是否为空
        if (connection != null) {
            // 不为空时，关闭连接
            connection.close();
        }
    }

    /**
     * 测试入口
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        /** 单线程使用-----编写
        // 1.创建连接配置
        Configuration conf = new Configuration();

        // 2.添加配置参数
        conf.set("hbase.zookeeper.quorum", "node1,node2,node3:2181");

        // 3.创建链接  默认使用同步连接
        Connection connection = ConnectionFactory.createConnection(conf);

        // 可以使用异步连接 hbase2.3之后版本提供 暂不推荐，后续会讲为什么不推荐使用  通过官网介绍
        CompletableFuture<AsyncConnection> asyncConnection = ConnectionFactory.createAsyncConnection(conf);

        // 4.使用连接
        System.out.println(connection);

        // 5.关闭连接
        connection.close();
         */

        /** 多线程-----直接使用已经创建好的连接，不要在main线程里面单独使用 */
        System.out.println(IntctHBaseConnection.connection);

        // 在main线程的最后记得关闭连接
        IntctHBaseConnection.closeConnection();
    }
}
